package com.shujia.mllib

import org.apache.spark.ml.feature.LabeledPoint
import org.apache.spark.ml.linalg
import org.apache.spark.ml.linalg.Vectors

object Demo1DataType {
  def main(args: Array[String]): Unit = {

    /**
      * 稠密向量  -- 有方向有大小
      * 向量中的元素类型必须是Double
      *
      */

    val denseVector: linalg.Vector = Vectors.dense(Array(1.0, 2.0, 0.0, 0.0, 4.0, 0.0, 5.4))

    println(denseVector)

    /**
      * 稀疏向量 -- 只保存不为0的位置
      */

    val sparseVector: linalg.Vector = Vectors.sparse(7, Array(0, 1, 4, 6), Array(1.0, 2.0, 4.0, 5.4))

    println(sparseVector)

    /**
      * 稠密向量和稀疏向量可以相互换行
      *
      */

    println(sparseVector.toDense)

    /**
      * 标记点，有特征向量和目标值组成
      *
      * 我们需要将原始数据转换成一个LabeledPoint数据带入到算法中
      *
      */

    // Create a labeled point with a positive label and a dense feature vector.
    val pos = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0))

    // Create a labeled point with a negative label and a sparse feature vector.
    val neg = LabeledPoint(0.0, Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0)))

  }

}
